// Clase que encapsula la funcion recursiva utilizada para resolver
// el problema de las N reinas.
public class AnalizaColumna
{
    // Desarrolla el arbol de busqueda a partir de tablero hasta
    // profundidad maxColuma.
    // Llegados a esa profundidad, ejecuta el metodo tratarNuevaSolucion
    // del objeto CallbackNuevaSolucion que recibe.
    static public void func(int maxColumna, TableroReinas tablero,
            CallbackNuevaSolucion callback)
    {
        int columna = tablero.getColumnasCompletadas();

        for (int fila = 0; fila < tablero.getTamanyo(); fila++)
        {
            if (tablero.posicionSegura(fila, columna))
            {
                tablero.colocarReina(fila, columna);

                if (columna == maxColumna - 1)
                    callback.tratarNuevaSolucion(tablero);
                else
                    func(maxColumna, tablero, callback);

                tablero.quitarReina(columna);
            }
        }
    }
};